package com.hsnn.medstgmini.base.std.controller;

import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.dict.controller.DicPharController;
import com.hsnn.medstgmini.base.std.model.HospInfo;
import com.hsnn.medstgmini.base.std.model.StdCompinfo;
import com.hsnn.medstgmini.base.std.model.form.StdProdDrugInfoForm;
import com.hsnn.medstgmini.base.std.service.StdCompinfoManager;
import com.hsnn.medstgmini.base.std.service.StdProdDrugInfoManager;
import com.hsnn.medstgmini.exception.MSException;
import com.hsnn.medstgmini.model.DrugStatus;
import com.hsnn.medstgmini.pro.base.model.BaseGoods;
import com.hsnn.medstgmini.pro.base.service.BaseGoodsManager;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.trading.catalog.model.form.GoodsSelectForm;
import com.hsnn.medstgmini.trading.catalog.service.PurHospCatalogManager;
import com.hsnn.medstgmini.trading.pur.model.form.DrugNoJNoX;
import com.hsnn.medstgmini.util.AccountUtil;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 企业产品库管理
 * @author 蔡春龙
 * @date 2015年8月18日
 */
@Controller
@RequestMapping("/stdProdDrugInfo")
public class StdProdDrugInfoController {

	private static final Logger log = Logger.getLogger(DicPharController.class);

	@Autowired
	private StdProdDrugInfoManager stdProdDrugInfoManager;
	
	@Autowired
	private StdCompinfoManager stdCompinfoManager;
	
	@Autowired
	private BaseGoodsManager baseGoodsManager;
	
	@Autowired
	private PurHospCatalogManager purHospCatalogManager;

	@Autowired
	private HttpServletRequest request;

	@Autowired
	private HttpSession session;

	/**
	 * @category 获取当前登陆人信息
	 * @date 2015年6月14日
	 * @return
	 */
	public SysUser getUser() {
		return (SysUser) session.getAttribute(Constants.USERINFO);
	}

	/**
	 * @category 跳转企业产品库管理列表页面
	 * @date 2015年8月18日
	 * @return
	 */
	@RequestMapping("/toStdProdDrugInfoList")
	public String toStdProdDrugInfoList() {
		return "/base/std/drug/stdProdDrugInfoList";
	}

	/**
	 * @category 分页查询企业产品列表
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	@RequestMapping("/getStdProdDrugInfoList")
	@ResponseBody
	public Pagination getStdProdDrugInfoList(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getStdProdDrugInfoList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	
	
	/**
	 * @category 跳转企业产品库管理详情页面
	 * @date 2015年8月18日
	 * @param model
	 * @param prodId
	 * @return
	 */
	@RequestMapping("/toStdProdDrugInfoDetail")
	public String toStdProdDrugInfoDetail(Model model, String prodId) {
		printParams();
		Map<String, Object> detail = stdProdDrugInfoManager
				.getStdProdDrugInfoDetail(prodId);
		model.addAttribute("detail", detail);
		return "/base/std/drug/stdProdDrugInfoDetail";
	}

	/**
	 * @category 企业产品库管理详情页面 弹窗
	 * @date 2015年8月18日
	 * @param model
	 * @param prodId
	 * @return
	 */
	@RequestMapping("/toStdProdDrugInfoDetailTC")
	public String toStdProdDrugInfoDetailTC(Model model, String prodId) {
		printParams();
		Map<String, Object> detail = stdProdDrugInfoManager
				.getStdProdDrugInfoDetail(prodId);
		model.addAttribute("detail", detail);
		return "/base/std/drug/stdProdDrugInfoDetailTC";
	}
	
	/**
	 * @category 企业产品信息
	 * @date 2015年8月18日
	 * @param model
	 * @param prodId
	 * @return
	 */
	@RequestMapping("/toDrugInfoByCode")
	public String toDrugInfoByCode(Model model, String drugCode) {
		printParams();
		Map<String, Object> detail = stdProdDrugInfoManager
				.getDrugInfoByCode(drugCode);
		model.addAttribute("detail", detail);
		return "/base/std/drug/drugInfoByCode";
	}

	/**
	 * @category 跳转企业产品库管理新增编辑页面
	 * @date 2015年8月18日
	 * @param model
	 * @param prodId
	 * @return
	 */
	@RequestMapping(value={"/add","/edit"})
	public String toStdProdDrugInfoEdit(Model model, String prodId,
			Integer opType) {
		printParams();
		Map<String, Object> detail = stdProdDrugInfoManager.getStdProdDrugInfoDetail(prodId);
		model.addAttribute("detail", detail);
		model.addAttribute("opType", opType);
		return "/base/std/drug/stdProdDrugInfoEdit";
	}

	/**
	 * @category 跳转企业产品库管理日志页面
	 * @date 2015年8月18日
	 * @param model
	 * @param prodId
	 * @return
	 */
	@RequestMapping("/toStdProdDrugInfoLogList")
	public String toStdProdDrugInfoLogList(Model model, String prodId) {
		printParams();
		model.addAttribute("prodId", prodId);
		request.setAttribute("code", request.getParameter("code"));
		try {
			String name = new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8");
			request.setAttribute("name", name);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return "/base/std/drug/stdProdDrugInfoLogList";
	}

	/**
	 * @category 分页查询企业产品日志列表
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	@RequestMapping("/getStdProdDrugInfoLogList")
	@ResponseBody
	public Pagination getStdProdDrugInfoLogList(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getStdProdDrugInfoLogList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 跳转企业产品库管理日志详情页面
	 * @date 2015年8月18日
	 * @param model
	 * @param prodId
	 * @return
	 */
	@RequestMapping("/toStdProdDrugInfoLogDetail")
	public String toStdProdDrugInfoLogDetail(Model model, String logId) {
		printParams();
		List<Map<String, Object>> list = stdProdDrugInfoManager.getStdProdDrugInfoLogDetail(logId);
		
		// --------begin
		List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();
		List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();
		String[] cColunm = {"药品编码","通用名","通用名英文","商品名","剂型","规格","转换系数","单位","材质","生产企业","状态","批准文号","批准日期","基本药物属性","基药序号","药理分类","专利类型","药品来源","是否低价药","是否农合","是否医保","药品本位码","药品本位码备注","说明"};
		String[] eColunm = {"drugCode","qualityspecName","qualityspecNameEng","busName","formName","specName","factor","unitName","materialName","prodCompName","status","approvalCode","approvalDate","drugAttr","drugIndex","pharName","patternType","drugSource","isLowprice","isAgriculture","isHealthcare","drugStdCode","drugStdcdRemark","remark"};
		for(int i = 0;i<cColunm.length;i++){
			Map<String,Object> map =  new HashMap<String,Object>();
			map.put("colunm", cColunm[i]);//字段名
			map.put("after", !"status".equals(eColunm[i])?list.get(0).get(eColunm[i]):DrugStatus.getName(Integer.parseInt(list.get(0).get(eColunm[i]).toString())));//修改后数据
			map.put("before", list.size()==1?null:!"status".equals(eColunm[i])?list.get(1).get(eColunm[i]):DrugStatus.getName(Integer.parseInt(list.get(1).get(eColunm[i]).toString())));//修改前数据
			if(list.size()==1){
				map.put("red", "1");//是否变红加粗 1是 0 否
			}else{
				//判断修改后与修改前数据是否相等
				if(list.get(0).get(eColunm[i])!=null&&list.get(1).get(eColunm[i])!=null&&!list.get(0).get(eColunm[i]).toString().equals(list.get(1).get(eColunm[i]).toString())){
					map.put("red", "1");
				}else{
					map.put("red", "0");
				}
			}
			mapList.add(map);
		}
		for(int i = 0;i<mapList.size();i++){//把要变红的放在list前面
			if("1".equals(mapList.get(i).get("red"))){
				dataList.add(mapList.get(i));
			}
		}
		for(int i = 0;i<mapList.size();i++){
			if("0".equals(mapList.get(i).get("red"))){
				dataList.add(mapList.get(i));
			}
		}
		request.setAttribute("dataList", dataList);
		// --------end
		
		request.setAttribute("list", list);

		return "/base/std/drug/stdProdDrugInfoLogDetail";
	}

	/**
	 * @category 启用
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	@RequestMapping("/changeEnabled")
	@ResponseBody
	public Pagination changeEnabled(String array) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			if (StringUtils.isNotBlank(array)) {
				Type type = new TypeToken<List<StdProdDrugInfoForm>>() {
				}.getType();
				Gson gson = new Gson();
				List<StdProdDrugInfoForm> list = gson.fromJson(array, type);
				int sum = stdProdDrugInfoManager.changeStatus(list,DrugStatus.enabled.getKey(), getUser());
				page.getConditions().put("sum", sum+"");
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 停用
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	@RequestMapping("/changeDisabled")
	@ResponseBody
	public Pagination changeDisabled(String array) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			if (StringUtils.isNotBlank(array)) {
				Type type = new TypeToken<List<StdProdDrugInfoForm>>() {
				}.getType();
				Gson gson = new Gson();
				List<StdProdDrugInfoForm> list = gson.fromJson(array, type);
				int sum = stdProdDrugInfoManager.changeStatus(list,DrugStatus.disabled.getKey(), getUser());
				page.getConditions().put("sum", sum+"");
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 保存企业产品库
	 * @date 2015年8月19日
	 * @param form
	 * @return
	 */
	@RequestMapping("/saveProdDrugInfo")
	@ResponseBody
	public Pagination saveProdDrugInfo(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			
			if (form != null) {
				if(StringUtils.isBlank(form.getDrugCode())){
					form.setDrugCode(AccountUtil.getStdSequence(Constants.STD_YAOPIN_PREFIX, Constants.STD_YAOPIN, Constants.STD_YAOPIN_LEN));
					page.setMsg(form.getDrugCode());
				}
				stdProdDrugInfoManager.saveProdDrugInfo(form, getUser());
				page.setSuccess(true);
			}
		} catch (MSException e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg(e.getMsg());
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * 
	 * @category 通用名、英文、剂型、规格弹窗
	 * @author 言科
	 * @date 2015年8月19日 String
	 */
	@RequestMapping("/toSelectQualityspec")
	public String toSelectQualityspec() {
		return "/base/std/selectQualityspec";
	}

	@RequestMapping("/getSelectQualityspec")
	@ResponseBody
	public Pagination getSelectQualityspec(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getSelectQualityspec(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * 
	 * @category 生产企业弹窗
	 * @author 言科
	 * @date 2015年8月19日 String
	 */
	@RequestMapping("/toSelectProdComp")
	public String toSelectProdComp(Model model, String prodCompName) {
		return "/base/std/selectProdComp";
	}
	
	
	/**
	 * @category 跳转到企业列表页面
	 * @author 韩守松
	 * @date   2016年1月13日
	 * @param  @param model
	 * @param  @param compType
	 * @param  @return
	 */
	@RequestMapping("/toSelectComp")
	public String toSelectComp(Model model, String compType) {
		log.info("企业弹框的企业类型："+compType);
		model.addAttribute("compType", compType);
		return "/base/std/selectComp";
	}

	/**
	 * @category 获取指定类型企业数据
	 * @author 韩守松
	 * @date   2016年1月13日
	 * @param  @param form
	 * @param  @return
	 */
	@RequestMapping("/getSelectComp")
	@ResponseBody
	public Pagination getSelectComp(Integer compType,StdProdDrugInfoForm form) {
		log.info("查询"+(compType==1?"生产企业":"配送企业")+"企业条件："+form.getCompCode()+";"+form.getCompName());
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdCompinfoManager.getCompData(compType, page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * @category 保存不竞不限药品 
	 * @author 韩守松
	 * @date   2016年1月13日
	 * @param  @param form
	 * @param  @return
	 */
	@RequestMapping("/saveDrugNoJNoXData")
	@ResponseBody
	public Pagination saveDrugNoJNoXData(DrugNoJNoX form) {
		printParams();
		Pagination page = new Pagination(request);
		BaseGoods goods = new BaseGoods();
		try {
			SysUser user = (SysUser) request.getSession().getAttribute(Constants.USERINFO);
			HospInfo info = user.getInfo();
			if (form != null) {
				if(StringUtils.isBlank(form.getDrugCode())){
					form.setDrugCode(AccountUtil.getStdSequence(Constants.STD_YAOPIN_PREFIX, Constants.STD_YAOPIN, Constants.STD_YAOPIN_LEN));
					page.setMsg(form.getDrugCode());
				}
				goods.setDrugCode(form.getDrugCode());
				goods.setProdCode(form.getProdCode());
				goods.setCompName(form.getProdName());
				goods.setDelCode(form.getDelCode());
				goods.setDelCompName(form.getDelName());
				goods.setDrugName(form.getDrugName());
				goods.setFormName(form.getDrugForm());
				goods.setSpecName(form.getSpec());
				goods.setUnit(form.getPackUnitName());
				goods.setAppoveCode(form.getApproveCode());
				goods.setHospCode(info.getHospCode());
				goods.setProdPompId(form.getProdCompId());
				goods.setPriNum(form.getNum());
				goods.setProPriceLimit(form.getPrice());
				goods.setQualityspecId(form.getQualityspecId());
				goods.setDrugCat(form.getRemark());
				goods.setDrugCatName(form.getDicName());
				goods.setUnitId(form.getUnitId());
				goods.setUnitCode(form.getUnitCode());
				baseGoodsManager.save(goods, user);
				page.setSuccess(true);
			}
		} catch (MSException e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg(e.getMsg());
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	@RequestMapping("/getSelectProdComp")
	@ResponseBody
	public Pagination getSelectProdComp(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getSelectProdComp(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * 
	 * @category 药理分类弹窗
	 * @author 言科
	 * @date 2015年8月19日 String
	 */
	@RequestMapping("/toSelectPhar")
	public String toSelectPhar(Model model, String phar) {
		return "/base/std/selectPhar";
	}

	@RequestMapping("/getSelectPhar")
	@ResponseBody
	public Pagination getSelectPhar(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getSelectPhar(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * 
	 * @category 材质弹窗
	 * @author 言科
	 * @date 2015年8月19日 String
	 */
	@RequestMapping("/toSelectMaterial")
	public String toSelectMaterial(Model model, String phar) {
		return "/base/std/selectMaterial";
	}

	@RequestMapping("/getSelectMaterial")
	@ResponseBody
	public Pagination getSelectMaterial(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getSelectMaterial(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * 
	 * @category 包装单位弹窗
	 * @author 言科
	 * @date 2015年8月19日 String
	 */
	@RequestMapping("/toSelectUnit")
	public String toSelectUnit(Model model, String phar) {
		return "/base/std/selectUnit";
	}

	@RequestMapping("/getSelectUnit")
	@ResponseBody
	public Pagination getSelectUnit(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getSelectUnit(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 跳转合并页面
	 * @date 2015年8月19日
	 * @return
	 */
	@RequestMapping("/toMergeProdDrugInfo")
	public String toMergeProdDrugInfo() {
		return "/base/std/drug/mergeProdDrugInfo";
	}

	/**
	 * @category 分页查询企业产品列表
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	@RequestMapping("/getMergeProdDrugInfoList")
	@ResponseBody
	public Pagination getMergeProdDrugInfoList(StdProdDrugInfoForm form,
			String exceptIds) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			if (StringUtils.isNotBlank(exceptIds)) {
				Type type = new TypeToken<List<StdProdDrugInfoForm>>() {
				}.getType();
				Gson gson = new Gson();
				List<StdProdDrugInfoForm> list = gson.fromJson(exceptIds, type);
				if (list != null && !list.isEmpty()) {
					List<String> ids = new LinkedList<String>();
					for (StdProdDrugInfoForm temp : list) {
						if (temp != null) {
							String prodId = temp.getProdId();
							if (StringUtils.isNotBlank(prodId)) {
								ids.add(temp.getProdId());
							}
						}
					}
					if (ids != null && !ids.isEmpty()) {
						form.setExceptIdList(ids);
					}
				}
			}
			page.setForm(form);
			stdProdDrugInfoManager.getMergeProdDrugInfoList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 保存合并
	 * @date 2015年8月21日
	 * @param mergerProdId
	 * @param mergedProdIds
	 * @return
	 */
	@RequestMapping("/saveMergeDrugInfo")
	@ResponseBody
	public Pagination saveMergeDrugInfo(String mergerProdId,
			String mergedProdIds) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			if (StringUtils.isBlank(mergerProdId)) {
				page.setSuccess(false);
				page.setMsg("请选择主合并数据！");
			} else if (StringUtils.isBlank(mergedProdIds)) {
				page.setSuccess(false);
				page.setMsg("请选择被合并数据！");
			} else {
				Type type = new TypeToken<List<StdProdDrugInfoForm>>() {
				}.getType();
				Gson gson = new Gson();
				List<StdProdDrugInfoForm> list = gson.fromJson(mergedProdIds,
						type);
				stdProdDrugInfoManager.saveMergeDrugInfo(mergerProdId, list,
						getUser());
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 跳转合并日志页面
	 * @date 2015年8月24日
	 * @return
	 */
	@RequestMapping("/toMergeProdDrugInfoLog")
	public String toMergeProdDrugInfoLog(Model model, String prodId) {
		printParams();
		Map<String, Object> detail = stdProdDrugInfoManager.getStdProdDrugInfoDetail(prodId);
		model.addAttribute("detail", detail);
		model.addAttribute("prodId", prodId);
		return "/base/std/drug/mergeProdDrugInfoLog";
	}

	/**
	 * @category 查询当前产品被谁合并
	 * @date 2015年8月24日
	 * @param form
	 * @return
	 */
	@RequestMapping("/getMergerProdDrugInfoLog")
	@ResponseBody
	public Pagination getMergerProdDrugInfoLog(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getMergerProdDrugInfoLog(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 查询当前产品合并了哪些产品
	 * @date 2015年8月24日
	 * @param form
	 * @return
	 */
	@RequestMapping("/getMergedProdDrugInfoLogList")
	@ResponseBody
	public Pagination getMergedProdDrugInfoLogList(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getMergedProdDrugInfoLogList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 企业端->基础库管理->企业产品库
	 * @date 2015年9月10日
	 * @return
	 */
	@RequestMapping("/toCompSelfDrugList")
	public String toCompSelfDrugList() {
		return "/base/std/sc/drug/compSelfDrugList";
	}

	/**
	 * @category 企业端->基础库管理->企业产品库(药品列表)
	 * @date 2015年9月10日
	 * @param form
	 * @return
	 */
	@RequestMapping("/getCompSelfDrugList")
	@ResponseBody
	public Pagination getCompSelfDrugList(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			StdCompinfo compInfo = getUser().getInfo();
			if (compInfo != null) {
				form.setProdId(compInfo.getCompId());
				page.setForm(form);
				stdProdDrugInfoManager.getStdProdDrugInfoList(page);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 企业端->基础库管理->企业产品库->产品详情
	 * @date 2015年9月10日
	 * @param model
	 * @param prodId
	 * @return
	 */
	@RequestMapping("/toCompSelfDrugDetail")
	public String toCompSelfDrugDetail(Model model, String prodId) {
		printParams();
		Map<String, Object> detail = stdProdDrugInfoManager
				.getStdProdDrugInfoDetail(prodId);
		model.addAttribute("detail", detail);
		return "/base/std/sc/drug/compSelfDrugDetail";
	}

	/**
	 * @category 企业端->基础库管理->企业产品库->编辑
	 * @date 2015年9月10日
	 * @param model
	 * @param prodId
	 * @param opType
	 * @return
	 */
	@RequestMapping(value={"/toCompSelfDrugAdd","toCompSelfDrugEdit"})
	public String toCompSelfDrugEdit(Model model, String prodId, Integer opType) {
		printParams();
		Map<String, Object> detail = stdProdDrugInfoManager
				.getStdProdDrugInfoDetail(prodId);
		model.addAttribute("detail", detail);
		model.addAttribute("opType", opType);
		return "/base/std/sc/drug/compSelfDrugEdit";
	}

	/**
	 * @category 企业端->基础库管理->企业产品库->新增编辑->保存
	 * @date 2015年9月10日
	 * @param form
	 * @return
	 */
	@RequestMapping("/saveCompSelfDrug")
	@ResponseBody
	public Pagination saveCompSelfDrug(StdProdDrugInfoForm form, int opType) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			StdCompinfo compInfo = getUser().getInfo();
			if (form != null && compInfo != null) {
				form.setProdCompId(compInfo.getCompId());
				form.setProdCompCode(compInfo.getCompCode());
				form.setProdCompName(compInfo.getCompName());
				form.setProdCompStatus((int) compInfo.getStatus());
				form.setAuditStatus(0);
				if(opType == 0){
						form.setDrugCode(AccountUtil.getStdSequence(Constants.STD_YAOPIN_PREFIX, Constants.STD_YAOPIN, Constants.STD_YAOPIN_LEN));
						page.setMsg(form.getDrugCode());
				}
				stdProdDrugInfoManager.saveProdDrugInfo(form, getUser());
				page.setSuccess(true);
			}
		} catch (MSException e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg(e.getMsg());
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心端->基础库管理->企业产品库->药品审核
	 * @date 2015年9月10日
	 * @return
	 */
	@RequestMapping("/toAuditCompDrugList")
	public String toAuditCompDrugList() {
		return "/base/std/zx/drug/auditCompDrugList";
	}

	/**
	 * @category 中心端->基础库管理->企业产品库->药品审核(待审核药品列表)
	 * @date 2015年9月10日
	 * @param form
	 * @return
	 */
	@RequestMapping("/getAuditCompDrugList")
	@ResponseBody
	public Pagination getAuditCompDrugList(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			stdProdDrugInfoManager.getAuditCompDrugList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心端->基础库管理->企业产品库->药品审核->审核
	 * @date 2015年9月10日
	 * @param model
	 * @param prodId
	 * @param opType
	 * @return
	 */
	@RequestMapping("/toAuditCompDrug")
	public String toAuditCompDrug(Model model, String prodId, Integer opType) {
		printParams();
		Map<String, Object> detail = stdProdDrugInfoManager.getStdProdDrugInfoDetail(prodId);
		model.addAttribute("detail", detail);
		model.addAttribute("opType", opType);
		return "/base/std/zx/drug/auditCompDrug";
	}

	/**
	 * @category 审核通过
	 * @date 2015年9月11日
	 * @param form
	 * @return
	 */
	@RequestMapping("/approve")
	@ResponseBody
	public Pagination approve(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			form.setAuditStatus(1);
			stdProdDrugInfoManager.auditCompDrug(form, getUser());
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 审核不通过
	 * @date 2015年9月11日
	 * @param form
	 * @return
	 */
	@RequestMapping("/unapprove")
	@ResponseBody
	public Pagination unapprove(StdProdDrugInfoForm form) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			form.setAuditStatus(2);
			stdProdDrugInfoManager.auditCompDrug(form, getUser());
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * 
	 *@category 获取参数打印
	 *@author wangbing
	 *@date 2015年6月9日
	 *Pagination
	 */
	@SuppressWarnings("rawtypes")
	public void printParams(){
		Enumeration paramNames = request.getParameterNames();
		try {
			while (paramNames.hasMoreElements()) {
				String paramName = (String) paramNames.nextElement();
				String paramValue = request.getParameter(paramName);
				log.info(paramName+":"+paramValue);
			}
		} catch (Exception e) {
			log.error("",e);
		}
	}

	@RequestMapping("exportExcel")
	@ResponseBody
	public Pagination exportExcel(HttpServletResponse response,String fileName){
		printParams();
		Pagination page = new Pagination();
		String drugCode = request.getParameter("drugCode");
		String qualityspecName = request.getParameter("qualityspecName");
		String formName = request.getParameter("formName");
		String specName = request.getParameter("specName");
		String factor = request.getParameter("factor");
		String unitName = request.getParameter("unitName");
		String materialName = request.getParameter("materialName");
		String prodCompName = request.getParameter("prodCompName");
		String status = request.getParameter("status");
		if(StringUtils.isNotBlank(drugCode)){
			page.getConditions().put("drugCode", drugCode.trim());
		}
		if(StringUtils.isNotBlank(qualityspecName)){
			page.getConditions().put("qualityspecName", qualityspecName.trim());
		}
		if(StringUtils.isNotBlank(formName)){
			page.getConditions().put("formName", formName.trim());
		}
		if(StringUtils.isNotBlank(specName)){
			page.getConditions().put("specName", specName.trim());
		}
		if(StringUtils.isNotBlank(factor)){
			page.getConditions().put("factor", factor.trim());
		}
		if(StringUtils.isNotBlank(unitName)){
			page.getConditions().put("unitName", unitName.trim());
		}
		if(StringUtils.isNotBlank(materialName)){
			page.getConditions().put("materialName", materialName.trim());
		}
		if(StringUtils.isNotBlank(prodCompName)){
			page.getConditions().put("prodCompName", prodCompName.trim());
		}
		if(StringUtils.isNotBlank(status)){
			page.getConditions().put("status", status.trim());
		}
		try {
			response.addHeader("Content-Disposition", "attachment;filename="+new String("药品.xls".getBytes("utf-8"),"iso8859-1")); 
			OutputStream os= new BufferedOutputStream(response.getOutputStream());  
			 response.setContentType("application/vnd.ms-excel;charset=utf-8");  
			 stdProdDrugInfoManager.exportExcel(page,os);

		} catch (Exception e) {
			page.setSuccess(false);
			e.printStackTrace();
		}
		return page;
	}
	
	
	/**
	 * @category 分页查询医疗机构不竞不限药品
	 * @author 韩守松
	 * @date   2016年1月14日
	 * @param  @param form
	 * @param  @return
	 */
	@RequestMapping("/getDrugNoJNoXList")
	@ResponseBody
	public Pagination getDrugNoJNoXList(DrugNoJNoX form) {
		log.info("查询医疗机构不竞不限药品参数："+form);
		printParams();
		Pagination page = new Pagination(request);
		try {
			HospInfo info = getUser().getInfo();
			form.setHospCode(info.getHospCode());
			page.setForm(form);
			baseGoodsManager.getNoJNoXGoodsData(page,form);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	
	/**
	 * @category 删除
	 * @author 韩守松
	 * @date   2016年1月14日
	 * @param  @param array
	 * @param  @return
	 */
	@RequestMapping("/deleteDrug")
	@ResponseBody
	public Pagination deleteDrug(String array) {
		printParams();
		Pagination page = new Pagination(request);
		try {
			HospInfo info = getUser().getInfo();
			if (StringUtils.isNotBlank(array)) {
				Type type = new TypeToken<List<GoodsSelectForm>>() {
				}.getType();
				Gson gson = new Gson();
				List<GoodsSelectForm> list = gson.fromJson(array, type);
				if(list.size() > 0){
					for(int i=0;i<list.size();i++){
						list.get(i).setHospCode(info.getHospCode());
					}
				}
				purHospCatalogManager.deleteHospcatalog(list);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
}
